package com.zh.work.util.jy;

import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.TreeMap;

/**
 * code is far away from bug with the animal protecting
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @Description: 银行卡认证与人脸识别消息通知
 * @Author: Li.HuiNeng
 * @Create in: 2020-07-23 16:44
 * @Version: 1.0.1
 */
@Component
public class MsgNotify {

    private static final Logger log = LoggerFactory.getLogger(MsgNotify.class);

    private static int i = 1;

    @Async
    public void msgNotify(String uId, String type, String status) {
        TreeMap<String, String> treeMap = new TreeMap<>();
        treeMap.put("StoreId", uId);
        treeMap.put("State", status);
        treeMap.put("Type", type);
        String str = treeMap.toString();
        String sign = str.substring(1, str.length() - 1).replace(",", "&").replaceAll(" ", "");
        String md5Hex1 = DigestUtil.md5Hex(sign + "&" + "U2FsdGVkX1pPQbsBAcON4xst55oa+VwdditFnl0F85M=");
        treeMap.put("Sign", md5Hex1.toUpperCase());
        String res = HttpUtil.post("http://fuhuibaapi.fuhuiba.ltd/api/Store/UpdateCertificationState", JSON.toJSONString(treeMap));
        HashMap retMap = JSON.parseObject(res, HashMap.class);
        if (retMap.get("Code").equals(100)) {
            log.info("{}接口调用完成,通知付惠吧修改状态完成!", type.equals("1") ? "人脸识别" : "信用卡认证");
        } else {
            log.warn("付惠吧返回信息：{}", res);
            i++;
            if (i >= 4) {
                log.error("{}商户认证失败,请重新发起{}认证请求!", uId, type.equals("1") ? "人脸识别" : "信用卡");
                return;
            } else {
                log.error("{}通知付惠吧修改状态失败,重试第{}次。", type.equals("1") ? "人脸识别" : "信用卡认证", i - 1);
            }
            try {
                Thread.currentThread().sleep(2000 * i * i);
                msgNotify(uId, type, status);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}
